package com.pxmeta.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pxmeta.user.entity.UserBill;
import com.pxmeta.user.entity.dto.ApplyWithdrawDTO;
import com.pxmeta.user.entity.vo.PartyUserBillVO;
import com.pxmeta.user.entity.vo.UserBillVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author wcl
 * @since 2022-07-13
 */
public interface IUserBillService extends IService<UserBill> {


    /**
     * 获取碰心币记录
     * @param userId
     * @param page
     * @param size
     * @return
     */
    List<UserBillVO> getCoinRecords(Long userId, Integer page, Integer size);


    /**
     * 获取收益记录
     * @param userId
     * @param page
     * @param size
     * @return
     */
    List<UserBillVO> getProfitRecords(Long userId, Integer page, Integer size);

    /**
     * 申请提现
     * @param userId
     * @param dto
     */
    void appWithdraw(Long userId, ApplyWithdrawDTO dto);


    /**
     * 获取提现记录
     * @param userId
     * @param page
     * @param size
     * @return
     */
    List<UserBillVO> getWithdrawRecords(Long userId, Integer page, Integer size);

    /**
     * 获取派对贡献榜单
     * @param partyId
     * @return
     */
    List<PartyUserBillVO> getContributionList(Long partyId, Integer type);

    /**
     * 获取房间流水
     * @param partyId
     * @return
     */
    Double getTotalBillNumber(String partyId,Integer type);

    /**
     * 获取派对魅力榜单
     * @param partyId
     * @return
     */
    List<PartyUserBillVO> getCharmList(Long partyId, Integer type);

    /**
     * 获取当月流水
     * @param userId
     * @return
     */
    Double getMonthProfit(Long userId);

    /**
     * 系统修改余额
     * @param userId
     * @param number
     * @param type
     */
    void systemEditBalance(Long userId, BigDecimal number, Integer type);

    /**
     * 系统修改收益
     * @param userId
     * @param number
     * @param type
     */
    void systemEditProfit(Long userId, BigDecimal number, Integer type);

    /**
     * 获取房间总流水
     * @param id
     * @return
     */
    Double getPartyBill(String id,Integer type);


    /**
     * 获取房间总流水
     * @return
     */
    Double getPartyBill(List<String> partyIds);

    List<PartyUserBillVO> getContributionTopThree(Long partyId);


    /**
     * 获取系统修改余额记录
     * @param page
     * @param size
     * @return
     */
    IPage<UserBillVO> getSystemUpdateBalanceList(Integer page, Integer size);
}
